package com.vhall.component.service.data;

import com.vhall.component.entity.data.vo.SelectTimeIntervalOptionsVO;
import com.vhall.component.entity.data.vo.*;
import com.vhall.component.entity.page.vo.PageVO;
import com.vhall.component.entity.tag.vo.PageChannelListRspVO;

import java.util.List;

/**
 * @author guoxin.wang
 * @date 2021-06-18 10:37
 */
public interface DataService {

    /**
     * 获得基础值
     *
     * @param reqVO 参数
     * @return 返回值
     */
    BasicStatisticsInfoVO getBasicStatisticsInfo(UserParamVO reqVO);

    /**
     * getDeviceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserDeviceRspVO> getDeviceInfo(UserParamVO reqVO);

    /**
     * getProvinceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserProvinceRspVO> getProvinceInfo(UserParamVO reqVO);

    /**
     * getUserWatchUvInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserLiveWatchUvRspVO> getUserWatchUvInfo(UserParamVO reqVO);

    /**
     * getUserWatchPvInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserWatchPvRspVO> getUserWatchPvInfo(UserParamVO reqVO);

    /**
     * getLiveBasicStatisticsInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    BasicStatisticsInfoVO getLiveBasicStatisticsInfo(UserParamVO reqVO);

    /**
     * getVodBasicStatisticsInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    BasicStatisticsInfoVO getVodBasicStatisticsInfo(UserParamVO reqVO);

    /**
     * getLiveDeviceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserDeviceRspVO> getLiveDeviceInfo(UserParamVO reqVO);

    /**
     * getVodDeviceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserDeviceRspVO> getVodDeviceInfo(UserParamVO reqVO);

    /**
     * getLiveUserWatchUvInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserLiveWatchUvRspVO> getLiveUserWatchUvInfo(UserParamVO reqVO);

    /**
     * getVodUserWatchUvInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserLiveWatchUvRspVO> getVodUserWatchUvInfo(UserParamVO reqVO);

    /**
     * getLiveProvinceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserProvinceRspVO> getLiveProvinceInfo(UserParamVO reqVO);

    /**
     * getVodProvinceInfo
     *
     * @param reqVO 参数
     * @return 返回值
     */
    List<UserProvinceRspVO> getVodProvinceInfo(UserParamVO reqVO);

    BasicStatisticsInfoVO getBasicInfo(UserParamVO reqVO);

    /**
     * 观看时段top
     */
    List<DpWatchTimeTopRspVO> getDpWatchTimeTop(UserParamVO reqVO);

    List<PageChannelListRspVO> getDpChannelAvgViewDuration(UserParamVO reqVO);

    List<DpLecturerAvgViewDurationRspVO> getDpLecturerAvgViewDuration(UserParamVO reqVO);

    List<UserViewDurationDistributionRspVO> getDpUserViewDurationDistribution(UserParamVO reqVO);

    NumOfViewersAndOtherInfoRspVO numOfViewersAndOtherInfo(UserParamVO reqVO);

    List<PlayVolumeTrendRspVO> playVolumeTrend(UserParamVO reqVO);

    Long virtualPv(String roomId);

    /**
     * 获取栏目的直播观看相关统计数据 - 分页
     * @param reqVO
     * @return
     */
    PageVO<DpLiveViewDataResponseVO> getDpColumnLiveViewData(UserParamVO reqVO);

    /**
     * 获取栏目的直播观看相关统计数据 - 全量数据
     * @param reqVO
     * @return
     */
    List<DpLiveViewDataResponseVO> getAllDpColumnLiveViewDataListMain(UserParamVO reqVO);

    /**
     * 获取 主播 的直播观看相关统计数据 - 分页
     * @param reqVO
     * @return
     */
    PageVO<DpLiveViewDataResponseVO> getDpAnchorLiveViewData(UserParamVO reqVO);
    /**
     * 获取 主播 的直播观看相关统计数据 - 全量数据
     * @param reqVO
     * @return
     */
    List<DpLiveViewDataResponseVO> getAllDpAnchorLiveViewDataListMain(UserParamVO reqVO);

    /**
     * 获取可选择下拉时间区间选项 list
     * @return
     */
    List<SelectTimeIntervalOptionsVO> getSelectTimeIntervalOptions();
}
